from PIL import Image, ImageDraw, ImageFont
import os
import json


def add_qr_code_to_template(template_path, qr_code_folder, output_folder):
    # 打开模板图像
    template_image = Image.open(template_path)

    # 获取模板图像的尺寸
    template_width, template_height = template_image.size
    # print('模版尺寸为：',template_width, template_height)
    # 加载所有QR码从给定的文件夹

    qr_codes = []
    qr_code_names = []
    for file_name in os.listdir(qr_code_folder):
        if file_name.endswith(".png"):
            qr_code_image = Image.open(os.path.join(qr_code_folder, file_name))
            qr_codes.append(qr_code_image)
            qr_code_names.append(file_name[:-4])  # 删除扩展名以获取名称
    # print(qr_code_names)

    # 检查QR码的数量是否与名字的数量匹配
    if len(qr_codes) != len(qr_code_names):
        # print("二维码数量与姓名数量不匹配")
        exit(-1)

    # 如果输出文件夹不存在，则创建该文件夹
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    # exit(-1)
    # 将QR码和名称添加到模板图像中，并保存
    for index, (qr_code, name) in enumerate(zip(qr_codes, qr_code_names)):
        # print('处理{}中。。。。'.format(name))
        # 创建要处理的模板映像的副本
        generated_image = template_image.copy()
        # 调整QR码的大小，以适应模板图像的一定百分比
        qr_code_width = 200
        qr_code_height = 200
        qr_code = qr_code.resize((qr_code_width, qr_code_height), Image.LANCZOS)
        # exit(-1)
        # 计算在模板图像上放置QR码的位置
        qr_code_x = (template_width - qr_code_width) // 2 + 250  # + - 微调
        qr_code_y = (template_height - qr_code_height) // 2 + 50

        # 将QR码粘贴到模板图像上
        generated_image.paste(qr_code, (qr_code_x, qr_code_y))

        # 在二维码下方添加姓名
        draw = ImageDraw.Draw(generated_image)
        font_size = 23
        font = ImageFont.truetype("arial.ttf", font_size)
        name_x = 140 # 微调
        name_y = 260
        draw.text((name_x, name_y), name, fill="black", font=font)

        # 保存生成的图像
        # output_path = os.path.join(output_folder, f"generated_{i + 1}.png")
        output_path = os.path.join(output_folder, "JZ-{0}.png".format(name))
        generated_image.save(output_path)
        # print('保存{}成功!!!!'.format(name))
        # print(qr_code_names)


if __name__ == "__main__":
    with open('config/config.json', 'r', encoding='utf-8') as f:
        config = json.load(f)
    template_path = config['template_path']
    qr_code_folder = config['qr_code_folder']
    output_folder = config['output_folder']
    # print(template_path)
    # print(qr_code_folder)
    # print(output_folder)
    add_qr_code_to_template(template_path, qr_code_folder, output_folder)
